Django

CookBook

매번 프로젝트 시작때마다 해야 할 것들이 있는데 까먹어서 적어둠

Django Migrate 방법

polls 라는 app 의 model을 migrate 하는 방법, 아래 명령을 순차적으로 실행한다.

  • mysite/settings.py 에 INSTALLED_APPS 에 polls 추가
  • manage.py makemigrations polls : Create a database schema
  • manage.py sqlmigrate polls 0001 : : Create a database schema
  • manage.py migrate : Create a Python database-access API for objects in models.py

Django Cookies

Django에서는 Cookie를 관리할 수 있는 매서드를 제공한다.

HttpResponse 객체에 cookie와 관련된 함수는 2개로 set_cookiedelete_cookie가 있다.

HttpRequest의 경우 request.COOKIE['cookie_name'] 형식으로 접근이 가능하다.


manage.py 에 사용자명령 추가하기

https://docs.djangoproject.com/en/1.10/howto/custom-management-commands/

Django의 User 모델 커스터마이징

모델

Admin 기능

Ajax load

이건 한 번에 못 쓸것 같다. 간단하게 필요했던 기능과 어떻게 해결했는지만 적어보려고 한다. 키워드로 찾길 권장하고 싶다.

특정 영역의 html 부분만 ajax로 불러올 수가 있다. jQuery Ajax의 load 함수가 그런 용도로 쓰인다. 사용 방법은 [$(selector).load(URL, data, callback)](http://api.jquery.com/load/) 형식이다. Django에서 사용하려면 메인 템플릿에서 특정 영역을 템플릿으로 분리한다. 그리고 분리된 부분을 [{% include 'template_name' %}](https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#include) 으로 대체한다. 그리고 Django의 URL과 해당 View 함수를 추가한다. View 함수에서는 template과 해당 context를 HttpResponse로 리턴하면 된다.

간단한 예제를 준비했다.

url.py

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'board/select/$', views.select_board_posts),
]

view.py

from django.http import HttpResponse
from django.template import loader, Context

from .models import Posts


def select_board_posts(request):
    tpl = load.get_template("board_detail.html")
    posts = Posts.objects.all()
    ctx = Context({
        'posts': posts
    })
    return HttpResponse(tpl.render(ctx))

board.html

<!-- board.html -->
<h1>Board</h1>
<div id='board-detail'>
    {% include 'board_detail.html' %}
    <Button onclick='onClickButton()'>출력</Button>
</div>
<script>
function onClickButton() {
    // 이 부분이 ajax의 load를 사용하는 부분, DB에 새로운 Post를 추가하고 테스트 해보자.
    $("#board-detail").load("board/select #board-detail-title");
}
</script>

board_detail.html

<div id='board-detail-title'>
{% for post in posts %}
    <h4>{{ post.title }}</h4>
{% endfor %}
</div>

버그 수정 중에 알게 된 것들

  • ajax를 사용할때 view 내부에서 django.contrib.authget_user(request) 함수를 사용할때 Errno 10053가 발생할 수도 있다. get_user와 request의 쓰기 과정에서 뭔가 싱크가 맞지 않아서 생기는 것 같다. 간혈적으로 발생할 수도 아닐 수도 있다. (지금 쓰고 있는 원인이 정확하지 않아서 답답하다)

results matching ""

    No results matching ""